package com.doupi.partner.util;

import java.util.Date;

import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.Seconds;

/**
 * 日期计算公式
 * 
 * @author Super Jens Wang
 * @version 1.0 $id: DateCalculator.java 2016年12月2日 下午2:18:45 Wang Le $
 */
public class DateUtils {

	/**
	 * 
	 * 日期比较 精确到天
	 * 
	 * <pre>
	 * 		thisDate 在日历上位置是否在 otherDate 之后， 1 是，0 同一天，-1 否
	 * 		如：
	 * 			2016-12-02 < 2016-12-03 返回  1
	 * 			2016-12-02 = 2016-12-02 返回  0
	 * 			2016-12-02 > 2016-12-01 返回 -1
	 * </pre>
	 * 
	 * @param thisDate
	 *            Date - 比较的date
	 * @param otherDate
	 *            Date - 比较的date
	 */
	public static int isAfterWithoutTime(Date thisDate, Date otherDate) {
		int days = Days.daysBetween(LocalDate.fromDateFields(thisDate), LocalDate.fromDateFields(otherDate)).getDays();
		return days > 0 ? 1 : (days < 0 ? -1 : 0);
	}

	/**
	 * 
	 * 日期比较 精确到秒
	 * 
	 * <pre>
	 * 		thisDate 在日历上位置是否在 otherDate 之后， 1 是，0 同一天，-1 否
	 * 		如：
	 * 			2016-12-02 14:00:00 < 2016-12-02 15:00:00 返回  1
	 * 			2016-12-02 14:00:00 = 2016-12-02 14:00:00 返回  0
	 * 			2016-12-02 14:00:00 > 2016-12-02 13:00:00 返回 -1
	 * </pre>
	 * 
	 * @param thisDate
	 *            Date - 比较的date
	 * @param otherDate
	 *            Date - 比较的date
	 */
	public static int isAfterWithTime(Date thisDate, Date otherDate) {
		int seconds = Seconds.secondsBetween(LocalDateTime.fromDateFields(thisDate), LocalDateTime.fromDateFields(otherDate)).getSeconds();
		return seconds > 0 ? 1 : (seconds < 0 ? -1 : 0);
	}

	/**
	 * 
	 * 日期比较 精确到天
	 * 
	 * <pre>
	 * 		thisDate 在日历上位置是否在 otherDate 之前， 1 是，0 同一天，-1 否
	 * 		如：
	 * 			
	 * 			2016-12-02 > 2016-12-01 返回   1
	 * 			2016-12-02 = 2016-12-02 返回   0
	 * 			2016-12-02 < 2016-12-03 返回  -1
	 * </pre>
	 * 
	 * @param thisDate
	 *            Date - 比较的date
	 * @param otherDate
	 *            Date - 比较的date
	 */
	public static int isBeforeWithoutTime(Date thisDate, Date otherDate) {
		return -isAfterWithoutTime(thisDate, otherDate);
	}

	/**
	 * 
	 * 日期比较 精确到秒
	 * 
	 * <pre>
	 * 		thisDate 在日历上位置是否在 otherDate 之前， 1 是，0 同一天，-1 否
	 * 		如：
	 * 			2016-12-02 14:00:00 > 2016-12-02 13:00:00 返回  1
	 * 			2016-12-02 14:00:00 = 2016-12-02 14:00:00 返回  0
	 * 			2016-12-02 14:00:00 < 2016-12-02 15:00:00 返回 -1
	 * </pre>
	 * 
	 * @param thisDate
	 *            Date - 比较的date
	 * @param otherDate
	 *            Date - 比较的date
	 */
	public static int isBeforeWithTime(Date thisDate, Date otherDate) {
		return -isAfterWithTime(thisDate, otherDate);
	}

	/**
	 * 相差的天数 otherDate - thisDate
	 * 
	 * @param thisDate
	 *            - 日历前面的日期
	 * @param otherDate
	 *            - 日历后面的日期
	 * @return
	 */
	public static int daysBetween(Date thisDate, Date otherDate) {
		return Days.daysBetween(LocalDate.fromDateFields(thisDate), LocalDate.fromDateFields(otherDate)).getDays();
	}
}
